﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing;
using BLLTZS;
using BLLTZS.Funcionalidad;
using System.IO;

namespace TZS.Cuentas
{
    public partial class MisDatos : FormGenerico
    {
        private bool ValidarControl(TextBox txt, Label lbl)
        {
            if (txt.Text.Length == 0)
            {
                txt.BackColor = System.Drawing.ColorTranslator.FromHtml("#FFE6EE");
                SetearVisibilidad(lbl, true);
                return false;
            }
            else
            {
                txt.BackColor = System.Drawing.ColorTranslator.FromHtml("#EAEAEA");
                SetearVisibilidad(lbl, false);
                return true;
            }
        }

        private void ValidarDatos()
        {
            SetearVisibilidad(pnlAvisoError, false);

            if (!ValidarControl(txtNombres, lblErrorNombres))
                SetearVisibilidad(pnlAvisoError, true);
            if (!ValidarControl(txtApellidos, lblErrorApellidos))
                SetearVisibilidad(pnlAvisoError, true);
            //if (!ValidarControl(txtDNI, lblErrorDNI))
            //    SetearVisibilidad(pnlAvisoError, true);
            //if (imgDNI1.ImageUrl.Contains("Forbidden"))
            //    SetearVisibilidad(pnlAvisoError, true);
            //if (imgDNI2.ImageUrl.Contains("Forbidden"))
            //    SetearVisibilidad(pnlAvisoError, true);
        }

        private void CargarComboFechas()
        {
            ddlAños.Items.Clear();

            for (int i = (DateTime.Today.Year - 15); i > (DateTime.Today.Year - 100); i--)
                ddlAños.Items.Add(i.ToString());


            ddlDias.Items.Clear();
            for (int i = 1; i <= 31; i++)
                ddlDias.Items.Add(i.ToString());
        }

        private void TraerDatos()
        {
            CargarComboFechas();
            BLLPerfil bllPerfil = new BLLPerfil();
            TZS_Perfil perfil = bllPerfil.TraerUltimaVersion(User.Identity.Name);

            if (perfil == null)
                SetearVisibilidad(lnkVerCV, false);
            else
            {
                txtNombres.Text = perfil.Nombres;
                txtApellidos.Text = perfil.Apellidos;
                txtDNI.Text = perfil.DNI;

                if (perfil.FechaNacimiento.HasValue)
                {
                    ddlAños.SelectedValue = perfil.FechaNacimiento.Value.Year.ToString();
                    ddlMeses.SelectedValue = perfil.FechaNacimiento.Value.Month.ToString();
                    ddlDias.SelectedValue = perfil.FechaNacimiento.Value.Day.ToString();
                }

                if (perfil.ArchivoCV == null || perfil.ArchivoCV.Length == 0)
                    SetearVisibilidad(lnkVerCV, false);
                else
                {
                    SetearVisibilidad(lnkVerCV, true);
                    lnkVerCV.NavigateUrl = string.Format(URLParaCV, perfil.ArchivoCV);
                }

                //SetearVisibilidad(lblDNIIncompleto, false);

                if (perfil.ArchivoDNI == null)
                {
                    //SetearVisibilidad(lblDNIIncompleto, true);
                    imgDNI1.ImageUrl = "~/Contenido/Imagenes/Forbidden.png";
                }
                else if(perfil.ArchivoDNI.Contains(".pdf"))
                    imgDNI1.ImageUrl = "~/Contenido/Imagenes/logoPDF.png";
                else
                    imgDNI1.ImageUrl = string.Format(URLParaMostrarDNI, perfil.ArchivoDNI);


                if (perfil.ArchivoDNI2 == null)
                {
                    //SetearVisibilidad(lblDNIIncompleto, true);
                    imgDNI2.ImageUrl = "~/Contenido/Imagenes/Forbidden.png";
                }
                else if (perfil.ArchivoDNI2.Contains(".pdf"))
                    imgDNI2.ImageUrl = "~/Contenido/Imagenes/logoPDF.png";
                else
                    imgDNI2.ImageUrl = string.Format(URLParaMostrarDNI, perfil.ArchivoDNI2);
            }

            BLLDomicilio bllDomicilio = new BLLDomicilio();
            TZS_Domicilio domicilio = bllDomicilio.TraerUltimaVersion(User.Identity.Name);

            if (domicilio != null)
            {
                txtCalle.Text = domicilio.Calle;
                txtNro.Text = (domicilio.Nro == null) ? string.Empty : domicilio.Nro.ToString();
                txtPiso.Text = (domicilio.Piso == null) ? string.Empty : domicilio.Piso.ToString();
                ddlLocalidades.SelectedValue = domicilio.IdLocalidad.ToString();
            }

            BLLContacto bllContacto = new BLLContacto();
            TZS_Contacto contacto = bllContacto.TraerUltimaVersion(User.Identity.Name);

            if (contacto != null)
            {
                txtEmail.Text = contacto.Email;
                txtTelefono.Text = contacto.Celular;
            }
        }

        private void SubirArchivoCV()
        {
            string pathArchivo = string.Empty;

            try
            {
                if (fuCV.FileName == null || fuCV.FileName == string.Empty)
                    return;

                string[] array = fuCV.FileName.Split(new string[] { "." }, StringSplitOptions.RemoveEmptyEntries);
                if (array.Length == 0)
                    return;

                string formato = array[array.Length - 1];
                if (!Properties.Resources.FormatosCV.Contains(formato.ToLower()))
                {
                    lblFuSubirCV.Text = "Formato de archivo no permitido";
                    lblFuSubirCV.ForeColor = Color.Red;
                    SetearVisibilidad(lblFuSubirCV, true);
                    return;
                }

                TZS_Usuario usuario = new BLLUsuario().TraerUsuario(User.Identity.Name);
                string nombreArchivo = GenerarNombreArchivoValido(string.Format("{0}-{1}-{2}.{3}", usuario.IdUsuario, usuario.NombreUsuario, "CV", formato), formato, URLParaCV);
                pathArchivo = MapPath(string.Format(URLParaCV, nombreArchivo));
                fuCV.SaveAs(pathArchivo);

                BLLPerfil bllPerfil = new BLLPerfil();
                TZS_Perfil perfil = bllPerfil.TraerUltimaVersion(User.Identity.Name);
                TZS_Perfil nuevaVersion = new TZS_Perfil();
                nuevaVersion.Apellidos = perfil.Apellidos;
                nuevaVersion.ArchivoCV = nombreArchivo;
                nuevaVersion.ArchivoDNI = perfil.ArchivoDNI;
                nuevaVersion.ArchivoDNI2 = perfil.ArchivoDNI2;
                nuevaVersion.DNI = perfil.DNI;
                nuevaVersion.FechaNacimiento = perfil.FechaNacimiento;
                nuevaVersion.Nombres = perfil.Nombres;
                nuevaVersion.TZS_Usuario = perfil.TZS_Usuario;

                bllPerfil.GuardarNuevaVersion(nuevaVersion, User.Identity.Name);
                bllPerfil.GuardarCambios();

                lblFuSubirCV.Text = "Su C.V ha sido subido exitosamente";
                lblFuSubirCV.ForeColor = Color.Green;
                SetearVisibilidad(lblFuSubirCV, true);
            }
            catch (Exception ex)
            {
                lblFuSubirCV.Text = "Ha ocurrido un error al intentar subir el archivo, intente más tarde.";
                lblFuSubirCV.ForeColor = Color.Red;
                SetearVisibilidad(lblFuSubirCV, true);

                if (pathArchivo != string.Empty && File.Exists(pathArchivo))
                    File.Delete(pathArchivo);
            }
        }


        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
                TraerDatos();

            SetearVisibilidad(new List<WebControl>() { lblGuardarContacto, lblGuardarDomicilio, lblGuardarPerfil, lblFuSubirCV, btnSubirCV }, false);
            ValidarDatos();
        }

        protected void btnGuardarPerfil_Click(object sender, EventArgs e)
        {
            try
            {
                DateTime fechaNacimiento = new DateTime(int.Parse(ddlAños.SelectedValue), int.Parse(ddlMeses.SelectedValue), int.Parse(ddlDias.SelectedValue));

                BLLPerfil bllPerfil = new BLLPerfil();
                TZS_Perfil perfil = new TZS_Perfil();
                perfil.Nombres = FiltrarTexto(txtNombres.Text, Properties.Resources.TextboxSeguro, true);
                perfil.Apellidos = FiltrarTexto(txtApellidos.Text, Properties.Resources.TextboxSeguro, true);
                perfil.FechaNacimiento = fechaNacimiento;
                perfil.DNI = FiltrarTexto(txtDNI.Text, "0123456789", false);

                bllPerfil.GuardarNuevaVersion(perfil, User.Identity.Name);
                bllPerfil.GuardarCambios();
                SetearVisibilidad(lblGuardarPerfil, true);
                lblGuardarPerfil.Text = "Se han guardados los cambios de perfil";
                lblGuardarPerfil.ForeColor = Color.Green;
            }
            catch (ArgumentOutOfRangeException ex)
            {
                SetearVisibilidad(lblGuardarPerfil, true);
                lblGuardarPerfil.Text = "Los datos de la fecha son inválidos";
                lblGuardarPerfil.ForeColor = Color.Red;
            }
            catch (Exception ex)
            {
                SetearVisibilidad(lblGuardarPerfil, true);
                lblGuardarPerfil.Text = "Ha ocurrido un error al intentar guardar los datos de perfil";
                lblGuardarPerfil.ForeColor = Color.Red;
            }
        }

        protected void btnGuardarDomicilio_Click(object sender, EventArgs e)
        {
            try
            {
                BLLDomicilio bllDomicilio = new BLLDomicilio();
                BLLLocalidad bllLocalidad = new BLLLocalidad(bllDomicilio.Contexto);

                TZS_Domicilio nuevoDomicilio = new TZS_Domicilio();
                nuevoDomicilio.TZS_Localidad = bllLocalidad.TraerLocalidad(int.Parse(ddlLocalidades.SelectedValue));
                nuevoDomicilio.Calle = txtCalle.Text;
                nuevoDomicilio.Nro = FiltrarTexto(txtNro.Text, "0123456789", false);
                nuevoDomicilio.Piso = FiltrarTexto(txtPiso.Text, Properties.Resources.TextboxSeguro, false);
                bllDomicilio.GuardarNuevaVersion(nuevoDomicilio, User.Identity.Name);
                bllDomicilio.GuardarCambios();
                SetearVisibilidad(lblGuardarDomicilio, true);
                lblGuardarDomicilio.Text = "Se han guardado los cambios de domicilio";
                lblGuardarDomicilio.ForeColor = Color.Green;
            }
            catch (Exception ex)
            {
                SetearVisibilidad(lblGuardarDomicilio, true);
                lblGuardarDomicilio.Text = "Ha ocurrido un error al intentar guardar los datos de perfil";
                lblGuardarDomicilio.ForeColor = Color.Red;
            }
        }

        protected void btnGuardarContacto_Click(object sender, EventArgs e)
        {
            try
            {
                BLLContacto bllContacto = new BLLContacto();
                TZS_Contacto contacto = new TZS_Contacto();
                contacto.Celular = txtTelefono.Text;
                contacto.Email = txtEmail.Text;
                bllContacto.GuardarNuevaVersion(contacto, User.Identity.Name);
                bllContacto.GuardarCambios();
                lblGuardarContacto.Text = "Se han guardado los datos de contacto";
                SetearVisibilidad(lblGuardarContacto, true);
            }
            catch (Exception ex)
            {
                SetearVisibilidad(lblGuardarContacto, true);
                lblGuardarContacto.Text = "Ha ocurrido un error al intentar guardar los datos de perfil";
                lblGuardarContacto.ForeColor = Color.Red;
            }
        }

        protected void btnSubirCV_Click(object sender, EventArgs e)
        {
            SubirArchivoCV();
            TraerDatos();
            ValidarDatos();
        }
    }
}